// Package main 实现了一个多服务gRPC服务器，用于演示多个gRPC服务的实现
package main

import (
	"context"
	"fmt"
	"grpc_study/grpc_proto/duo_proto"
	"log"
	"net"

	"google.golang.org/grpc"
)

// VideoServer 定义视频服务结构体
type VideoServer struct {
}

// Look 实现视频服务的Look方法
// 参数:
//   - ctx: 上下文信息
//   - request: 请求参数
//
// 返回值:
//   - res: 响应结果
//   - err: 错误信息
func (VideoServer) Look(ctx context.Context, request *duo_proto.Request) (res *duo_proto.Response, err error) {
	// 打印视频请求信息到控制台
	fmt.Println("video:", request)

	// 返回响应结果
	return &duo_proto.Response{
		Name: "fengfeng",
	}, nil
}

// OrderServer 定义订单服务结构体
type OrderServer struct {
}

// Buy 实现订单服务的Buy方法
// 参数:
//   - ctx: 上下文信息
//   - request: 请求参数
//
// 返回值:
//   - res: 响应结果
//   - err: 错误信息
func (OrderServer) Buy(ctx context.Context, request *duo_proto.Request) (res *duo_proto.Response, err error) {
	// 打印订单请求信息到控制台
	fmt.Println("order:", request)

	// 返回响应结果
	return &duo_proto.Response{
		Name: "fengfeng",
	}, nil
}

// main 函数是程序的入口点，负责启动多服务gRPC服务器
func main() {
	// 监听指定端口
	listen, err := net.Listen("tcp", ":8080")
	if err != nil {
		log.Fatal(err)
	}

	// 创建gRPC服务器实例
	s := grpc.NewServer()

	// 注册视频服务和订单服务
	duo_proto.RegisterVideoServiceServer(s, &VideoServer{})
	duo_proto.RegisterOrderServiceServer(s, &OrderServer{})

	// 打印服务器启动信息
	fmt.Println("grpc server程序运行在：8080")

	// 开始处理客户端请求
	err = s.Serve(listen)
}
